package log

import (
	"context"
	"io"
	"time"
)

var std *Logger

func init() {
	std = New()
	ExitHandlerAppend(func() {
		std.Stop()
	})
}

// 获取全局的标准日志对象
func StandardLogger() *Logger {
	return std
}

// 设置日志等级
func SetLevel(level Level) {
	std.SetLevel(level)
}

// 获取日志等级
func GetLevel() Level {
	return std.GetLevel()
}

// 判断当前日志等级是否大于指定等级
func IsLevelEnabled(level Level) bool {
	return std.IsLevelEnabled(level)
}

// 设置日志调用位置记录标识
func SetReportCaller(include bool) {
	std.SetReportCaller(include)
}

// 设置日志数据序列化对象
func SetFormatter(formatter Formatter) {
	std.SetFormatter(formatter)
}

// 设置日志数据输出对象
func SetOutput(out io.Writer) {
	std.SetOutput(out)
}

// 添加钩子函数
func AddHook(hook Hook) {
	std.AddHook(hook)
}

func WithError(err error) *Entry {
	return std.WithError(err)
}

func WithContext(ctx context.Context) *Entry {
	return std.WithContext(ctx)
}

func WithField(key string, value any) *Entry {
	return std.WithField(key, value)
}

func WithFields(fields Fields) *Entry {
	return std.WithFields(fields)
}

func WithTime(t time.Time) *Entry {
	return std.WithTime(t)
}

func Trace(args ...any) {
	std.Trace(args...)
}

func Debug(args ...any) {
	std.Debug(args...)
}

func Print(args ...any) {
	std.Print(args...)
}

func Info(args ...any) {
	std.Info(args...)
}

func Warn(args ...any) {
	std.Warn(args...)
}

func Warning(args ...any) {
	std.Warning(args...)
}

func Error(args ...any) {
	std.Error(args...)
}

func Panic(args ...any) {
	std.Panic(args...)
}

func Fatal(args ...any) {
	std.Fatal(args...)
}

func Tracef(format string, args ...any) {
	std.Tracef(format, args...)
}

func Debugf(format string, args ...any) {
	std.Debugf(format, args...)
}

func Infof(format string, args ...any) {
	std.Infof(format, args...)
}

func Warnf(format string, args ...any) {
	std.Warnf(format, args...)
}

func Warningf(format string, args ...any) {
	std.Warningf(format, args...)
}

func Errorf(format string, args ...any) {
	std.Errorf(format, args...)
}

func Panicf(format string, args ...any) {
	std.Panicf(format, args...)
}

func Fatalf(format string, args ...any) {
	std.Fatalf(format, args...)
}

func Traceln(args ...any) {
	std.Traceln(args...)
}

func Debugln(args ...any) {
	std.Debugln(args...)
}

func Println(args ...any) {
	std.Println(args...)
}

func Infoln(args ...any) {
	std.Infoln(args...)
}

func Warnln(args ...any) {
	std.Warnln(args...)
}

func Warningln(args ...any) {
	std.Warningln(args...)
}

func Errorln(args ...any) {
	std.Errorln(args...)
}

func Panicln(args ...any) {
	std.Panicln(args...)
}

func Fatalln(args ...any) {
	std.Fatalln(args...)
}

func TraceFn(f FunctionLog) {
	std.FatalFn(f)
}

func DebugFn(f FunctionLog) {
	std.DebugFn(f)
}

func InfoFn(f FunctionLog) {
	std.InfoFn(f)
}

func WarnFn(f FunctionLog) {
	std.WarnFn(f)
}

func WarningFn(f FunctionLog) {
	std.WarningFn(f)
}

func ErrorFn(f FunctionLog) {
	std.ErrorFn(f)
}

func PanicFn(f FunctionLog) {
	std.PanicFn(f)
}

func FatalFn(f FunctionLog) {
	std.FatalFn(f)
}
